//
//  LWTabBarItem.swift
//  LW_Weibo
//
//  Created by 刘伟 on 16/7/12.
//  Copyright © 2016年 LWSpro. All rights reserved.
//

import UIKit

class LWTabBarItem: UITabBarItem {
    
    override var  badgeValue: String? {
        
        didSet { //赋值 只要赋值就走这个方法  相当于重写了set方法
            
            //获取到tabBarController  两种方法  
            //第一种  通过主窗口获取  有弊端 若是突然换了主控制器那就gg了
//            let tabBarController = UIApplication.sharedApplication().keyWindow?.rootViewController as? UITabBarController
            
            
            /*
              _target 可以通过遍历UITabBarItem的成员遍历得到的
            
            */
            
            //第二种  通过kvc来获取对应的key的值
            let tabBarController = valueForKey("_target") as? UITabBarController
            
            
            
            //控制器有tabBarController的属性
            for tabBarChild in (tabBarController?.tabBar.subviews)! { //遍历最外层 先获取到下面的UITabBarButton
                
                //打印tabBarChild
//                print(tabBarChild)
                
                //根据打印的值判断 如果是UITabBarButton的对象 那么再遍历
                if tabBarChild.isKindOfClass(NSClassFromString("UITabBarButton")!) {
                    
                    
                    for tabBarBadgeChild in tabBarChild.subviews {//遍历每一个tabBarItem
                        
                        //打印tabBarBadgeChild
//                        print(tabBarBadgeChild)
                        
                        if tabBarBadgeChild.isKindOfClass(NSClassFromString("_UIBadgeView")!) {
                            
                            
                            
                            //再遍历  因为最终要获取到UIBadgeBackground
                            for tabBarBadgeBackground in tabBarBadgeChild.subviews {
                                
                                if tabBarBadgeBackground.isKindOfClass(NSClassFromString("_UIBadgeBackground")!) {
                                    
                                    
                                    //统计这个类里面有多少个成员变量
                                    var count: UInt32 = 0
                                    
                                    //获取里面的成员列表 相当于一个数组
                                    let ivars = class_copyIvarList(NSClassFromString("_UIBadgeBackground")!, &count)
                                    
                                    //遍历
                                    for i in 0..<count {
                                        
                                        let ivar = ivars[Int(i)]
                                        
                                        //获取成员名字
                                        let name = ivar_getName(ivar)
                                        //类型
                                        let type = ivar_getTypeEncoding(ivar)
                                        
                                        //把获取到的成员名字转换成字符串
                                        let nameStr = String(CString: name, encoding: NSUTF8StringEncoding)
                                        
                                        let typeStr = String(CString: type, encoding: NSUTF8StringEncoding)
                                        
                                        //打印出来
//                                        print(nameStr)
//                                        print(typeStr)
                                        //  使用kvc方式给我们_image成员变量赋值
                                        if nameStr == "_image" {
                                            tabBarBadgeBackground.setValue(UIImage(named: "main_badge"), forKey: "_image")
                                            
                                            
                                            
                                        }
                                        
                                    }
                                    
                                    
                                }
                                
                            }
                            
                            
                            
                        }
                        
                        
                    }
                    
                }
                
            }

            
            
            
            
        }
        
        
        
        
    }
    
    
    

}
